using System;

using Atomic.Structures;

namespace Atomic.Thermodynamics
{
	public interface IHelmholtzGrandPotential
	{
		/// <summary>
		/// The free energy (eV) as a function of temperature (K), volume (Å^3), and composition.
		/// </summary>
		double FreeEnergy(double temperature, double volume, Composition composition);

		/// <summary>
		/// The pressure (eV/Å^3, 1 eV/Å^3 = 160.2 GPa) as a function of temperature (K), volume (Å^3), and composition.
		/// </summary>
		double Pressure(double temperature, double volume, Composition composition);

		/// <summary>
		/// The chemical potential (eV) as a function of temperature (K), volume (Å^3), and composition.
		/// </summary>
		ChemicalPotential ChemicalPotential(double temperature, double volume, Composition composition);

		/// <summary>
		/// The volume (Å^3) at which the pressure (eV/Å^3, 1 eV/Å^3 = 160.2 GPa) is as specified.
		/// </summary>
		double PressureEquilibriumVolume(double temperature, double pressure, Composition composition);

		IGibbsGrandPotential GibbsPotential
		{
			get;
		}
	}
}
